Tomorrow Happy Karwa Chauth from Isolated Study! Study smarter this festive season with IsolatedAI.Try AI free →

Computer science

Computer science

'

• A detailed and elaborated answer to the task question, if there is any.

"PLEASE SHOW ALL OUTPUT FOR ALL TASKS PROGRAMS""PLEASE SHOW ALL OUTPUT FOR ALL TASKS PROGRAMS"

M2a Jxn Dl QLUAAAAASUVORK5CYII=


divide.c

-------------

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "mpi.h"

int main(int argc, char * argv[] ) {
int rank; /* rank of each MPI process */
int size; /* total number of MPI processes */
int i; /* counter */
int distance; /* distance between sender and receiver */

MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);

/* Am I sender or receiver? */
/* Who am I sending/receiving to/from */
distance = 1;
i = 1;
while (distance <= size / 2){  
if (rank < distance) {
printf ("At time step %d, sender %d sends to %d\\n", i, rank, rank + distance);
}
if ((rank >= distance) && (rank < distance * 2)){
printf ("At time step %d, receiver %d receives from %d\\n", i, rank, rank - distance);
}
printf ("Process %d has distance value %d and time step %d\\n", rank, distance, i);
distance = distance * 2;
i += 1;
}

MPI_Finalize();
return 0;  
}

P8b TGj+Y3w+8AAAAAEl FTk Su Qm CC


scatterv.c

--------------

#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int rank, size;  
int i;
int sendcounts[4] = {1,2,3,4}; /* each process will receive its rank plus 1 numbers from the sendbuf array */
int displs[4] = {0,0,0,0}; /* array describing the displacements where each segment begins and is initialized to all 0s */
int sendbuf[10] = {2,13,4,3,5,1,0,12,10,8}; /* the buffer to be sent */
int *recvbuf; /* array at each process to receive data. To be initialized based on process rank */

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

/* initializes recvbuf to contain exactly rank plus 1 numbers */
recvbuf = malloc(sizeof(int)* (rank + 1));

// calculate displacements
for (i = 1; i < 4; i++) {
displs[i] = displs[i-1] + sendcounts[i-1];
}

// divide the data among processes as described by sendcounts and displs
MPI_Scatterv(sendbuf, sendcounts, displs, MPI_INT, recvbuf, (rank + 1), MPI_INT, 0, MPI_COMM_WORLD);

// print what each process received
printf("%d: ", rank);
for (i = 0; i < sendcounts[rank]; i++) {
printf("%d ", recvbuf[i]);
}
printf("\\n");

free(recvbuf);
MPI_Finalize();

return 0;
}

Ohqp NDXaq AAAAAASUVORK5CYII=

gatherv.c

--------------

#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int rank, size;  
int i;
int recvcounts[4] = {1,2,3,4}; /* process 0 will receive from each process that process rank */
/* plus 1 numbers */
int displs[4] = {0,0,0,0}; /* array describing the displacements where each segment begins and is initialized to all 0s */
int *sendbuf; /* the buffer to be sent. will be initialized individually at each process */
int *recvbuf; /* arrayto receive data. will only be initialized at process 0*/

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

/* initializes recvbuf to receive 10 numbers */
if (rank == 0){
recvbuf = malloc(sizeof(int) * (10));

for (i = 0; i < 10; i ++)
recvbuf[i] = -1;
}

/* initializes sendbuf to receive 10 numbers */
sendbuf = malloc(sizeof(int) * (rank + 1));
for (i = 0; i < (rank + 1); i++){
sendbuf[i] = rank;
}

// calculate displacements
for (i = 1; i < 4; i++) {
displs[i] = displs[i-1] + recvcounts[i-1];
}

// divide the data among processes as described by sendcounts and displs
MPI_Gatherv(sendbuf, rank + 1, MPI_INT, recvbuf, recvcounts, displs, MPI_INT, 0, MPI_COMM_WORLD);

// print what process has at the end

if (rank == 0){
for (i = 0; i < 10; i++) {
printf("%d ", recvbuf[i]);
}
printf("\\n");
free(recvbuf);
}
MPI_Finalize();
return 0;
}

Ig AAAAASUVORK5CYII=

gatherv.c

--------------

#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int rank, size;  
int i;
int recvcounts[4] = {1,2,3,4}; /* process 0 will receive from each process that process rank */
/* plus 1 numbers */
int displs[4] = {0,0,0,0}; /* array describing the displacements where each segment begins and is initialized to all 0s */
int *sendbuf; /* the buffer to be sent. will be initialized individually at each process */
int *recvbuf; /* arrayto receive data. will only be initialized at process 0*/

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

/* initializes recvbuf to receive 10 numbers */
if (rank == 0){
recvbuf = malloc(sizeof(int) * (10));

for (i = 0; i < 10; i ++)
recvbuf[i] = -1;
}

/* initializes sendbuf to receive 10 numbers */
sendbuf = malloc(sizeof(int) * (rank + 1));
for (i = 0; i < (rank + 1); i++){
sendbuf[i] = rank;
}

// calculate displacements
for (i = 1; i < 4; i++) {
displs[i] = displs[i-1] + recvcounts[i-1];
}

// divide the data among processes as described by sendcounts and displs
MPI_Gatherv(sendbuf, rank + 1, MPI_INT, recvbuf, recvcounts, displs, MPI_INT, 0, MPI_COMM_WORLD);

// print what process has at the end
if (rank == 0){
for (i = 0; i < 10; i++) {
printf("%d ", recvbuf[i]);
}
printf("\\n");
free(recvbuf);
}
MPI_Finalize();
return 0;
}

------------------------------------------------------------------


"PLEASE SHOW ALL OUTPUT FOR ALL TASKS PROGRAMS"

NOTE:

• A detailed and elaborated answer to the task question, if there is any.

'

Manu
Manu

Expert Title:TEST

Answer

Student’s rating for this solution:

★ ★ ★ ★ ★ (5/5)

Extracted Transcript from Images

+